package fr.uhp.mpr.tools;

/**
 * Cette classe regroupe un ensemble d'outils
 * dont le programme a besoin pour manipuler les probabilites.
 */
public class Proba {

	private double proba;
	public final double Eps=1e-7;

	public Proba(){
		this.proba = 0;
	};

	public Proba(double proba){
		setProba(proba);
	}

	public Proba(Proba proba) {
		setProba(proba);
	}

	public double getProba() {
		return proba;
	}

	public void setProba(Proba proba) {
		this.proba = proba.getProba();  // validite verifiee lors de la construction de l'objet
	}

	public void setProba(double proba) {
		//if (proba >= 0 && proba <= (1 + Eps))
			this.proba = proba;
		//else throw new IndexOutOfBoundsException("Valeur erronee : " + proba);
	}

	public boolean equals(Proba proba) {
		return this.equals(proba.getProba());
	}

	public static Proba sum(Proba p1, Proba p2) {
		return new Proba(
				(p1 != null ? p1.getProba() : 0) 
				+ (p2 != null ? p2.getProba() : 0)
		);
	}

	public static Proba[] times( Proba[][] p1, Proba[] p2) {

		Proba[] result = new Proba[p2.length];

		for(int i = 0 ; i < p1.length; i++){
			double x = 0;

			for(int j = 0 ; j < p1[0].length ; j++)
				x += p2[j].getProba() * p1[i][j].getProba();

			result[i] = new Proba(x);
		}
		return result;
	}

	@Override
	public String toString() {
		return "" + proba;
	}
}
